// Vue项目中，EventSource触发的事件中this指向变了
// 使用const that = this，然后在EventSource触发的事件中使用that
export default {
    es: null,
    closeEventSource: function ()
    {
        if (this.es)
        {
            this.es.close()
        }
    },
    initEventSource: function (url, onEventCallback)
    {
        var _that = this;
        if (typeof (EventSource) !== 'undefined')
        {
            let VITE_APP_BASE_API = localStorage.getItem("local_server_ip") || window.HC_config.VITE_APP_BASE_API || process.env.VITE_APP_BASE_API;
            this.es = new EventSource(VITE_APP_BASE_API + url, {withCredentials: true}); // 后端接口，要配置允许跨域属性
            // 与事件源的连接刚打开时触发
            this.es.onopen = function (e)
            {
                console.log('eventSource连接成功', e)
            };
            // 当从事件源接收到数据时触发
            this.es.onmessage = function (res)
            {
                // console.log('收到服务器内容', res);
                if (res.data)
                {
                    onEventCallback(res.data);
                }
            };
            // 与事件源的连接无法打开时触发
            this.es.onerror = function (e)
            {
                console.log(e);
                _that.closeEventSource(); // 关闭连接
            };
            // 侦听命名事件，即自定义的事件
            this.es.addEventListener('notice', function (e)
            {
                console.log(e.data)
            })
        }
        else
        {
            console.log('当前浏览器不支持使用EventSource接收服务器推送事件!');
        }

    }
}
